package cn.ejiakanghu.logistics.service;

import org.linlinjava.litemall.db.domain.AgedmallLgBaseInfo;
import org.linlinjava.litemall.db.domain.AgedmallLgBusiRecord;
import org.linlinjava.litemall.db.domain.AgedmallLgReceiveOrder;
import org.omg.CORBA.INTERNAL;

import java.util.List;

/**
 * 物流相关基础服务
 *
 * @author houzb
 * @Description
 * @create 2021-11-04 9:12
 */
public abstract class LogisticsBaseServiceAbstract {

    /**
     * 物流任务信息表的 信息插入 agedmall_lg_mission
     *
     * @param baseInfoId agedmalllgmission 业务信息id
     * @param type       agedmalllgmission 任务类型
     * @return
     */
    public abstract List<Integer> insertIntoOneMission(Integer baseInfoId, int type);

    /**
     * 创建任务
     * @param baseInfoId
     * @param type
     * @return
     */
    public abstract List<Integer> insertIntoOneMissionExec(Integer baseInfoId, int type, boolean isManual);

    /**
     * 通过传递的小程序下单单号查询  agedmall_lg_baseInfo和type
     *
     * @param orderCode agedmall_lg_baseInfo 小程序下单单号
     * @param type      物流类型
     * @return
     */

    public abstract List<AgedmallLgBaseInfo> getAgedmallLgBaseInfosByOrderCode(String orderCode, Integer type);


    /**
     * 物流任务信息表的 信息插入 agedmall_lg_mission  后台管理专用
     *
     * @param type       agedmalllgmission 任务类型
     * @return
     */
    public abstract List<Integer> insertIntoMissonByOrderCodeBackstage(String orderCode, int type);

    /**
     * 物流任务信息表的 信息插入 agedmall_lg_mission  后台管理专用
     *
     * @param baseInfoId agedmalllgmission 业务信息id
     * @param type       agedmalllgmission 任务类型
     * @return
     */
    public abstract List<Integer> insertIntoOneMissionBackstage(Integer baseInfoId, int type);


    /**
     * 通过传递的小程序下单单号查询  agedmall_lg_baseInfo
     *
     * @param orderCode agedmall_lg_baseInfo 小程序下单单号
     * @return
     */
    public abstract List<AgedmallLgBaseInfo> getAgedmallLgBaseInfosByOrderCode(String orderCode);

    /**
     * 将 List<AgedmallLgBaseInfo> 信息插入到agedmall_lg_mission 表
     *
     * @param orderCode 小程序下单单号
     * @param type      agedmalllgmission 任务类型
     * @return
     */
    public abstract List<Integer> insertIntoMissonByOrderCode(String orderCode, int type);
    public abstract List<Integer> insertIntoMissonByOrderCodeExec(String orderCode, int type, boolean isManual);

    /**
     * 接单信息表的 信息插入 agedmall_lg_receive_order
     *
     * @param agedmallLgReceiveOrder 接单信息表 对象
     * @return
     */
    public abstract int insertIntoOneReceiveOrder(AgedmallLgReceiveOrder agedmallLgReceiveOrder);

    /**
     * 根据agedmall_lg_receive_order的物流信息id查询 物流业务相关的基本信息表 并且更新 当前物流状态的值 lg_stat
     *
     * @param receiveOrderId 接单记录id
     * @param stat           当前物流状态
     * @return
     */
    public abstract int updateBaseInfoLgStatByReceiveOrderId(Integer receiveOrderId, Integer stat);

    /**
     * 更新物流任务信息表的 missionIsOver 字段
     *
     * @param id     物流任务信息表 id
     * @param isOver 任务是否结束
     * @return
     */
    public abstract int updateLgMissionMissionIsOver(Integer id, Integer isOver);

    /**
     * 根据 agedmall_lg_base_info的id更新agedmall_lg_base_info当前物流状态ig_stat
     *
     * @param id     物流信息id
     * @param isOver 业务是否结束
     * @param stat   当前物流状态
     * @return 问题 根据baseInfId查出来的数据可能不止一条
     */
    public abstract int updateBeseInfoLgStatByBaseInfoId(Integer id, Integer isOver, Integer stat);

    /**
     * 根据missionId更新 missionIsOver type的状态
     *
     * @param id         lgMission表的 id
     * @param isOverStat lgmission表的 物流状态
     * @return
     */
    public abstract int updateLgMissionMissionIsOverStatById(Integer id, int isOverStat);

    /**
     * 接单信息表的信息入库  待定
     *
     * @param receiveOrderId
     * @param busiStat
     * @param lgType
     * @return
     */
    /**
     * 更新mission表 配货插入的数据的状态
     *
     * @param missionId mission表的id
     * @return
     */
    public abstract int updateMissionByMissionId(Integer missionId);

    /**
     * 更新mission表的 type和misisonIsOver字段
     *
     * @param misisonId
     * @param missionIsOver 用来判断 misison表的 type字段和isOver 应该是什么状态
     * @return
     */
    public abstract List<Integer> updateMissionMissionIsOver(Integer misisonId, Integer missionIsOver);

    /**
     * 根据id更新lgBusiReCord表的状态
     *
     * @param busiReCordId
     * @param pickupIsCompleteOrReturnIsCompleteFlag 取货完成或者是退货完成标识
     */
    public abstract void updateBusiReCordById(Integer busiReCordId, Integer pickupIsCompleteOrReturnIsCompleteFlag);

    /**
     * 更新接单表信息的数据
     *
     * @param receiveOrderId
     */
    public abstract void updateReceiveOrderById(Integer receiveOrderId);

    /**
     * 根据missionId查询mission信息
     *
     * @param missionId
     * @param pickupIsCompleteOrReturnIsCompleteFlag 取货完成或者是退货完成标识
     */
    public abstract void selectMissionByMissionIdAndUpdateMission(Integer missionId, Integer pickupIsCompleteOrReturnIsCompleteFlag);

    /**
     * 插入物流业务记录表
     *
     * @param manId
     * @param missionId
     */
    public abstract Long insertIntoLgBusiRecord(Integer manId, Integer missionId);

    /**
     * 插入图片表
     *
     * @param busiId
     * @param imgType
     * @param imgUrls
     */
    public abstract void insertBusiImg(Long busiId, Integer imgType, String imgUrls);


    /**
     * 更新图片表
     *
     * @param busiId
     * @param imgType
     * @param imgUrls
     */
    public abstract void updateBusiImg(Long busiId, Integer imgType, String imgUrls);

    /**
     * @param lgContent
     * @return
     */
    public abstract List<Integer> getorderGoodsIds(String lgContent);

    /**
     * @param base64Img
     * @return
     */
    public abstract String base64ToUrl(List<String> base64Img);

    /**
     * 根据missionId更新baseInfo的LgStat
     *
     * @param missionId
     * @param baseLgStat 当前的物流状态
     */
    public abstract void updateBaseInfoLgStatByMissionId(Integer missionId, Integer baseLgStat);


    /**
     * 更新baseinfo的状态
     *
     * @param missionId
     * @param lgStat
     */
    public abstract void updateLgBaseInfoLgStatAndLgIsOverByMissionId(Integer missionId, Integer lgStat);

    /**
     * receiveorder表 新增
     *
     * @param agedmallLgBaseInfo
     * @param deliveryManId
     * @param receiverType
     * @param execType
     * @return
     */
    public abstract AgedmallLgReceiveOrder insertReceiveOrder(AgedmallLgBaseInfo agedmallLgBaseInfo, Integer deliveryManId, Integer receiverType, Integer execType);

    /**
     * busireceive表的新增
     *
     * @param missionId
     * @param receiverOrderId
     * @param missionType
     * @param orderCode
     * @param busiStat
     * @return
     */
    public abstract AgedmallLgBusiRecord insertBusiRecord(Long missionId, Long receiverOrderId, Integer missionType, String orderCode, Integer busiStat);

    /**
     * 更新orderGoods表的状态
     *
     * @param lgContent
     * @param state
     */
    public abstract void updateOrderGoodsStat(String lgContent, Integer state);

    /**
     * receiveorder busiorder busiimg 通用的插入操作以及baseinfo的状态更新操作
     *
     * @param manId
     * @param missionId
     * @param messageType
     * @param receiveType
     * @param execType
     */
    public abstract void logisticsEventInProgress(Integer manId, Integer missionId, Integer messageType, Integer receiveType, Integer execType);

    /**
     * 配货完成操作
     *
     * @param missionId
     * @param imgs
     * @param nowLgStat
     * @param completeLgStat
     * @param errorMsg
     */
    public abstract boolean pickingCompleteOperation(Integer missionId, List<String> imgs, int nowLgStat, int completeLgStat, String errorMsg);

    /**
     * 配送完成操作
     *
     * @param missionId
     * @param nowLgStat
     * @param completeLgStat
     * @param errorMsg
     */
    public abstract boolean deliveryCompletionOperation(Integer missionId, int nowLgStat, int completeLgStat, String errorMsg);


}
